package br.skytef.stmanager.beans;

import java.io.IOException;
import java.util.Date;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;

import br.skytef.stmanager.daos.ClienteContatoDao;
import br.skytef.stmanager.daos.MotivoSuporteDao;
import br.skytef.stmanager.daos.ProdutoClienteDao;
import br.skytef.stmanager.daos.ProdutoDao;
import br.skytef.stmanager.daos.SoftwareHouseDao;
import br.skytef.stmanager.daos.SubErroDao;
import br.skytef.stmanager.daos.TarefaDAO;
import br.skytef.stmanager.daos.UtcDAO;
import br.skytef.stmanager.entities.ClienteContatoEntity;
import br.skytef.stmanager.entities.ClienteEntity;
import br.skytef.stmanager.entities.MotivoSuporteEntity;
import br.skytef.stmanager.entities.ParceiroClienteEntity;
import br.skytef.stmanager.entities.ParceiroEntity;
import br.skytef.stmanager.entities.ProdutoClienteEntity;
import br.skytef.stmanager.entities.ProdutoEntity;
import br.skytef.stmanager.entities.SoftwareHouseEntity;
import br.skytef.stmanager.entities.SubErroEntity;
import br.skytef.stmanager.entities.TarefaEntity;
import br.skytef.stmanager.utils.Consulta;
import br.skytef.stmanager.utils.Data;


@ManagedBean(name="TarefaBean")
@SessionScoped
public class TarefaBean {
	/**
	 * Campos com seus respectivos Getters e Setters.ELementos de tela
	 */
	public TarefaEntity getTarefa() {return tarefa;}
	public void setTarefa(TarefaEntity tarefa) {TarefaBean.tarefa = tarefa;}
	private static  TarefaEntity tarefa;

	private List<TarefaEntity> resulTarefa;
	public List<MotivoSuporteEntity> getMotivoSuporte() {return motivoSuporte;}
	public void setMotivoSuporte(List<MotivoSuporteEntity> motivoSuporte) {this.motivoSuporte = motivoSuporte;}
	private List<MotivoSuporteEntity> motivoSuporte;

	public List<SubErroEntity> getSuberro() {return suberro;}
	public void setSuberro(List<SubErroEntity> suberro) {this.suberro = suberro;}
	private List<SubErroEntity> suberro;

	public String getTextoConsulta() {return textoConsulta;}
	public void setTextoConsulta(String textoConsulta) {this.textoConsulta = textoConsulta;}
	private String textoConsulta;

	private static String cadContato;
	public static String getCadContato() {return cadContato;}
	public static void setCadContato(String cadContato) {TarefaBean.cadContato = cadContato;}

	public ClienteEntity getCliente() {return cliente;}
	public void setCliente(ClienteEntity cliente) {this.cliente = cliente;}
	private ClienteEntity cliente;

	public ProdutoClienteEntity getProdCliente() {return prodCliente;}
	public void setProdCliente(ProdutoClienteEntity prodCliente) {this.prodCliente = prodCliente;}
	private ProdutoClienteEntity prodCliente;

//	private UsuarioEntity usuario;
	private List <ClienteContatoEntity> contatos;
	
	public List<ClienteContatoEntity> getContatos() {
		return contatos;
	}
	public void setContatos(List<ClienteContatoEntity> contatos) {
		this.contatos = contatos;
	}
	public ProdutoEntity getProduto() {return produto;}
	public void setProduto(ProdutoEntity produto) {this.produto = produto;}
	private  ProdutoEntity produto;

	private ParceiroClienteEntity clienteRevenda;

	public SoftwareHouseEntity getSftHouse() {return sftHouse;}
	public void setSftHouse(SoftwareHouseEntity sftHouse) {this.sftHouse = sftHouse;}
	private SoftwareHouseEntity sftHouse;

	public ParceiroEntity getParceiro() {return parceiro;}
	public void setParceiro(ParceiroEntity parceiro) {this.parceiro = parceiro;}
	private ParceiroEntity parceiro;

	public String getAtendimento() {return atendimento;}
	public void setAtendimento(String atendimento) {this.atendimento = atendimento;}
	private String atendimento = "false";

	public String getError() {return error;}
	public void setError(String error) {this.error = error;}
	private String error ;

	public ClienteContatoEntity getContatoCliente() {return contatoCliente;}
	public void setContatoCliente(ClienteContatoEntity contatoCliente) {this.contatoCliente = contatoCliente;}
	private ClienteContatoEntity contatoCliente;

	public String getTeste() {return teste;}
	public void setTeste(String teste) {this.teste = teste;}
	private String teste = "false";

	public String getMotivo() {return motivo;}
	public void setMotivo(String motivo) {this.motivo = motivo;}
	private String motivo;
	
	public String getProtocolo() {return protocolo;}
	public void setProtocolo(String protocolo) {this.protocolo = protocolo;}
	private String protocolo;

	
	private int tpConsulta;
	public TarefaBean() {
	
	    setTarefa(new TarefaEntity());
	    
	    setCliente(new ClienteEntity());
		tarefa.setDataInclusao(new Data().DtTime());
		long teste = gerarNumTarefa();
		tarefa.setId(teste);
		getListMotivoSuporteEntities();

	}

	/**
	 * Método para incluir registro de atendimento
	 * @param ActionEvent
	 * @throws IOException
	 */

	

	@SuppressWarnings("deprecation")
	private static long gerarNumTarefa(){
		Date data  = new Data().DtTime();
		String numString;
		numString =String.valueOf(data.getYear()+1900);
		numString +=String.valueOf(data.getMonth()+1);
		numString +=String.valueOf(data.getDate());		
		numString +=String.valueOf(data.getHours());
		numString +=String.valueOf(data.getMinutes());
		numString +=String.valueOf(data.getSeconds());
		numString +=String.valueOf(LoginBean.getUsuarioBD().getId());
		return Long.parseLong(numString);

	}

	public List<MotivoSuporteEntity> getListMotivoSuporteEntities(){
		List <MotivoSuporteEntity> motivoSuporte;
		motivoSuporte = new MotivoSuporteDao().listar();
		return motivoSuporte;

	}
	
	public void localizarContato(){
		getListContatoEntities();
	}
	public void localizar(ActionEvent actionEvent) throws IOException{
		TarefaEntity tarefa = new TarefaEntity();
		cliente = new Consulta().cliente(textoConsulta);

		if (cliente != null){
			prodCliente = new ProdutoClienteDao().localizar(cliente.getIdCliente());
			produto = new ProdutoDao().buscarId(prodCliente.getProduto_id());
			tarefa.setTipoVPN(prodCliente.getTipoVpn());
			sftHouse = new SoftwareHouseDao().buscarIdCliente(cliente.getIdCliente());
			LocalizarRevenda();
			atendimento = "true";
		}else{
			FacesContext facesContext = FacesContext.getCurrentInstance(); 
			facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN,"Cliente não encontrado", ""));
		}

	}
	public void LocalizarRevenda(){
		//Localiza a revenda
		//		clienteRevenda = new ParceiroClienteDao().buscar(cliente.getIdCliente());

		if (clienteRevenda != null){
			//			parceiro = new ParceiroDao().buscar(clienteRevenda.getParceiroId());
		}
	}

	public List <ClienteContatoEntity> getListContatoEntities(){
		cliente = new Consulta().cliente(textoConsulta);
		contatos =  new ClienteContatoDao().listarContato(cliente.getIdCliente());
		return contatos;
	}
	
	public List <SubErroEntity> getListSubErroEntities(){
		List <SubErroEntity> suberro;
		suberro = new SubErroDao().listar();
		return suberro;
	}

	public void cadContato() {
		cadContato = textoConsulta;
	}

	public void cadastrarMotivo(){
		FacesContext facesContext = FacesContext.getCurrentInstance();

		if (new MotivoSuporteDao().inserir(motivo)){
			facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,"Cadastro realizado com sucesso", ""));

		}else{
			error = MotivoSuporteDao.getErro();
			facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,"Não foi possível realizar o cadastro:", error));
		}
	}

	public void	salvar(ActionEvent actionEvent) throws IOException{	
		FacesContext facesContext = FacesContext.getCurrentInstance();

		new TarefaDAO().inserir(tarefa);
		if(new UtcDAO().inserirUTC(tarefa.getId(),cliente.getIdCliente(), LoginBean.getUsuarioBD().getId())){
			facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,"Cadastro realizado com sucesso", ""));
			atendimento = "false";
			DashboardBean.pageProtocolo();
			

		}else{
			facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,"Não foi possível realizar o cadastro:", ""));
		}

	}
	
	
	
	public String limpar(){
		  setTarefa(new TarefaEntity());
		  setSftHouse(new SoftwareHouseEntity());
		  setProdCliente(new ProdutoClienteEntity());
		  setProduto(new ProdutoEntity());
		  setCliente(new ClienteEntity());
		  setTextoConsulta(null);
		  setContatos(null);
		  setContatoCliente(new ClienteContatoEntity());
		  setAtendimento("false");
			long teste = gerarNumTarefa();
			tarefa.setId(teste);
		return null;
	}
	
	public void consultarTarefa(){
		if (tpConsulta == 1 || tpConsulta == 2 ||tpConsulta == 3 ){ 
			cliente = new Consulta().cliente(textoConsulta);
			resulTarefa = new TarefaDAO().listar(cliente.getIdCliente(),null,null);
		}if (tpConsulta == 4){
			resulTarefa = new TarefaDAO().listar(0,textoConsulta,null);
		}
		else if (tpConsulta == 5){
			resulTarefa = new TarefaDAO().listar(0,null,textoConsulta);
		}
	
	}
	

	public int getTpConsulta() {return tpConsulta;}
	public void setTpConsulta(int tpConsulta) {this.tpConsulta = tpConsulta;}
	
	public List<TarefaEntity> getResulTarefa() {return resulTarefa;}
	public void setResulTarefa(List<TarefaEntity> resulTarefa) {this.resulTarefa = resulTarefa;}

}

	
